/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.DAO;

import com.DAO.ConexaoPostgreSQL.ConnectionFactory;
import com.Model.AcervoConteudo;
import com.Model.AcervoRegistro;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Fellipe
 */
public class AcervoRegistroDAO {
    
    private Connection con = new ConnectionFactory().getConnection();
    private PreparedStatement pstm;
    
    public void create(AcervoRegistro ar) {
        
        try {
            
            String sql = "SELECT MAX(registro) + 1 AS maior FROM acervoregistro";
            pstm = con.prepareStatement(sql);
            ResultSet rs = pstm.executeQuery();
            rs.next();
            int chaveRegistro = rs.getInt("maior");
            
            sql = "INSERT INTO acervoregistro VALUES (?, ?)";
            pstm = con.prepareStatement(sql);
            pstm.setInt(1, chaveRegistro);
            pstm.setInt(2, ar.getChaveAcervo());
            pstm.execute();
            
            for(AcervoConteudo ac: ar.getConteudo()) {
                ac.setChaveRegistro(chaveRegistro);
                new AcervoConteudoDAO().create(ac);
            }
            
        } catch (SQLException ex) {
            System.out.println(ex);
        } finally {
            try {
                pstm.close();
                con.close();
            } catch (SQLException ex) {
                System.out.println("Não foi possivel terminar a conexão " + ex);
            }
        }
        
        
    }
    
    public List<AcervoRegistro> readNomes(int chaveAcervo) {
        
        List<AcervoRegistro> listaRegistros = new ArrayList<AcervoRegistro>();
        
        try {
            String sql = "SELECT * FROM acervoregistro WHERE chaveacervo = ? ORDER BY registro DESC";
            pstm = con.prepareStatement(sql);
            pstm.setInt(1, chaveAcervo);
            ResultSet rs = pstm.executeQuery();
            
            while(rs.next()) {
                
                AcervoRegistro ar = new AcervoRegistro();
                
                ar.setRegistro(rs.getInt("registro"));
                
                listaRegistros.add(ar);
                
            }

        } catch (SQLException ex) {
            System.out.println(ex);
        } finally {
            try {
                pstm.close();
                con.close();
            } catch (SQLException ex) {
                System.out.println("Não foi possivel terminar a conexão " + ex);
            }
        }
        
        return listaRegistros;
        
    }
    
    public AcervoRegistro read(int chaveRegistro) {
                
        AcervoRegistro ar = new AcervoRegistro();
        
        try {
            String sql = "SELECT * FROM acervoregistro WHERE registro = ?";
            pstm = con.prepareStatement(sql);
            pstm.setInt(1, chaveRegistro);
            ResultSet rs = pstm.executeQuery();
            
            while(rs.next()) {

                ar.setRegistro(rs.getInt("registro"));
                ar.setChaveAcervo(rs.getInt("chaveacervo"));
                ar.setConteudo(new AcervoConteudoDAO().read(ar.getRegistro()));
                                
            }

        } catch (SQLException ex) {
            System.out.println(ex);
        } finally {
            try {
                pstm.close();
                con.close();
            } catch (SQLException ex) {
                System.out.println("Não foi possivel terminar a conexão " + ex);
            }
        }
        
        return ar;
        
    }
    
    
    public void update() {
        
    }
    
    public void delete(int chaveAcervoRegistro) {
        
        try {
            
            String sql = "UPDATE acervoregistro SET ativo = ? WHERE chaveacervoconteudo = ?";
            pstm = con.prepareStatement(sql);
            pstm.setString(1, "0");
            pstm.setInt(2, chaveAcervoRegistro);
            
        } catch (SQLException ex) {
            System.out.println(ex);
        } finally {
            try {
                pstm.close();
                con.close();
            } catch (SQLException ex) {
                System.out.println("Não foi possivel terminar a conexão " + ex);
            }
        }
        
    }
    
}
